package com.zhangguoyu;

import java.util.HashSet;
import java.util.UUID;
import java.util.concurrent.ThreadLocalRandom;

/**
 * 随机工具类
 * @author 45466
 *
 */
public class RandomUtil {
 	
	static String STR="";
	static {
		STR="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
	}
	
	/**
	* 功能：获取随机正整数
	*
	* @return int 正整数
	*/
	public static int nextInt(){
	
		ThreadLocalRandom t = ThreadLocalRandom.current();
		 int nextInt = t.nextInt();
		 return nextInt>0? nextInt: -nextInt;
	}
	
	/**
	* 功能：获取指定最大范围的随机正整数
	* 示例：min=5,max=10，那么返回5-10(包括5和10)之间任意一个数
	*
	* @param int min 最小范围，要包含最小范围值。
	* @param int max 最大范围，要包含最大范围值。
	* @return 随机数
	*/
	public static int nextInt(int min, int max) {
		
		
		ThreadLocalRandom t = ThreadLocalRandom.current();
		return t.nextInt(min, max);
		
	}
	
	/**
	* 功能：在最小值与最大值之间截取随机数
	* 场景：在List集合中截取多个的随机记录。
	* 注意：返回的结果不能有重复值
	*
	* @param int min 起始值。
	* @param int max 结束值。
	* @return 多个随机数
	*/
	public static int[] subIntegers(int min, int max, int subLength){
		
		ThreadLocalRandom t = ThreadLocalRandom.current();
		
		HashSet<Integer> set = new HashSet<Integer>();
		//只要set集合当中数据小于需求的个数 就一直获取
		int n=0;
		while (set.size()<subLength) {
			System.out.println("n is " + (n++));
			int nextInt = t.nextInt(min, max);
			set.add(nextInt);
		}
		
		int [] arr = new int[subLength];
		int i=0;
		for (int ranomInt : set) {
			arr[i++]=ranomInt;
		}
		return arr;
	}
	
	/**
	* 功能：获取1-9,a-Z之间的随机字符，即包括数字或字母(含大小写)的字符
	*
	* @return 随机字符
	*/
	public static char nextCharacter(){
		
		//0-9 a-z  A-Z
		ThreadLocalRandom t = ThreadLocalRandom.current();
		int nextInt = t.nextInt(62);
		if(nextInt<=9)
			return (char)('0' + nextInt);
		
		if(nextInt<=35)
			return (char)('A' - 10  + nextInt);
		
		return (char)('a' - 36 + nextInt);
		
	}
	/**
	* 功能：获取指定长度的随机字符数
	* 场景：创建验证码
	*
	* @param int length 长度。
	* @return 随机字符串
	*/
	public static String nextString(int length){
		ThreadLocalRandom t = ThreadLocalRandom.current();
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < length; i++) {
			// 随机数值
			int nextInt = t.nextInt(62);
			sb.append(STR.charAt(nextInt));
		}
		
		return sb.toString();
	}
	
	/**
	* 功能：获取不带横线的UUID
	* 场景：上传文件时作为新文件名
	*
	* @return 不带横线的UUID
	*/
	public static String uuid(){
		//TODO 实现代码
		String uuidStr = UUID.randomUUID().toString();
		uuidStr = uuidStr.replaceAll("_", "");
		uuidStr = uuidStr.replaceAll("-", "");
		return uuidStr;
		
	}
	

	
}
